Forum des exercices du projet Zuul

Exercice 7.22

  
 
Avatar anonfirstname2 anonlastname2
Exercice 7.22
par anonfirstname2 anonlastname2, mardi 24 novembre 2015, 16:04
 
  1. Lire la suite du chapitre 7 [ci-joint] (si possible en anglais, sinon en français).

    Ne commencer cet exercice qu'après avoir totalement compris, terminé, et testé l'exercice 7.20.

  2. Modify the project so that a Room can hold any number of Items. Use a collection (*) to do this.
    Make sure the Room has an addItem method that places an Item into
    the Room.
    Make sure all Items get shown when the player enters a Room.

  3. Pour cet exercice, il peut être utile d'ajouter un attribut nom à un Item pour pouvoir plus facilement y accéder que par une description en plusieurs mots.

(*) Aide : Vous ne connaissez pas beaucoup de collections pour l'instant, mais pour savoir laquelle choisir, demandez-vous quelle en sera l'utilisation la plus fréquente, et donc quel service vous voulez qu'elle sache rendre.


Avatar Denis BUREAU
Re: Exercice 7.22
par Denis BUREAU, dimanche 6 octobre 2013, 16:41
 

Un étudiant a écrit :

Bonjour,

je suis a l'exercice 7.22 page 249 et je me demande si je peux utiliser la classe HashMap pour pouvoir créer un nombre incalculable d'item ?

Merci d'avance

Avatar Denis BUREAU
Re: Exercice 7.22
par Denis BUREAU, dimanche 6 octobre 2013, 16:44
 

"Un nombre incalculable d'items", ça fait trop !

Si vous voulez stocker de nombreux items identiques, il va falloir ajouter la notion de nombre d'items pour chaque item présent dans la pièce.

Par contre, si c'est juste pour stocker plusieurs items dans une pièce, la HashMap semble idéale, puisqu'elle vous permettra de récupérer l'objet Item en lui passant simplement son nom.

Avatar Hassan DIAB
Re: Exercice 7.22
par Hassan DIAB, dimanche 6 octobre 2013, 18:57
 

Merci,

Dans la classe Room on avait mis :

private HashMap<String, Room> exits;

est ce que je peux faire de même dans la classe item ? :

private HashMap<String, Item> items;

 

Avatar Denis BUREAU
Re: Exercice 7.22
par Denis BUREAU, dimanche 6 octobre 2013, 19:43
 

Si vous avez mis private HashMap<String, Room> exits; dans Room, c'est que vous voulez stocker plusieurs sorties dans chaque Room. Il se trouve que chaque sortie est en fait la Room qui se trouve dans la direction donnée, d'où le 2ème type indiqué dans la HashMap.

Puisqu'on veut faire la même chose, c'est-à-dire stocker plusieurs Items dans chaque Room, il faut effectivement écrire private HashMap<String, Item> items; dans la classe Room (pas dans la classe Item).

Avatar Hassan DIAB
Re: Exercice 7.22
par Hassan DIAB, dimanche 6 octobre 2013, 19:51
 

et pourquoi pas dans la classe item ? ( ce que j'avais fais au début c'est d'importer Hashmap dans la classe item) je ne comprend pas pourquoi cela ne fonctionnerai pas dans Item.

Avatar Denis BUREAU
Re: Exercice 7.22
par Denis BUREAU, dimanche 6 octobre 2013, 21:05
 

Ce n'est pas un Item qui contient plusieurs items, mais bien une Room qui contient plusieurs items !

Par ailleurs, on ne doit ajouter un attribut dans la classe Item que si c'est une caractéristique que possède chaque objet Item.

Avatar Hassan DIAB
Re: Exercice 7.22
par Hassan DIAB, dimanche 6 octobre 2013, 21:25
 

Quand vous parlez de caractéristiques vous voulez dire le poids et la description de l'item ?

Avatar Denis BUREAU
Re: Exercice 7.22
par Denis BUREAU, lundi 7 octobre 2013, 08:50
 

oui

Avatar Jean COULOM
Re: Exercice 7.22
par Jean COULOM, dimanche 13 octobre 2013, 18:58
 

Est-il possible de récupérer les informations d'un Item placé dans une hashMap aItemm avec quelque chose comme 

public Item getItem()
{
Item vItem=null;
Set<String> vKeys = aItemm.keySet();
for(String vName : vKeys){
return vItem= aItemm.get(vKeys);
}
return vItem;

pour pouvoir en plus de simplement afficher le nom de l'objet présent dans la room, afficher la description complète de l'objet en appliquant quelque chose comme aCurrentRoom.getItem().getLongItemDescription() ?

(Merci pour vos réponses sur les autres exercices)

Avatar Denis BUREAU
Re: Exercice 7.22
par Denis BUREAU, dimanche 13 octobre 2013, 19:47
 

Pour récupérer un Item stocké dans une HashMap, encore faudrait-il connaître son nom et le passer en paramètre à la méthode censée le retrouver et le retourner.Cette méthode n'a pas besoin de parcourir tous les éléments de la HashMap, puisque get() est justement là pour ça !

Par contre, pour construire la (longue) chaîne contenant tous les noms d'Items présents dans la pièce, il faut effectivement parcourir l'ensemble des clés de la HashMap.

Attention aux noms que vous donnez à vos variables !

Par exemple, aItem devait représenter un Item, aItems peut maintenant représenter plusieurs Items ; aItemm ne veut rien dire ...

Avatar Walid BEDJA
Re: Exercice 7.22
par Walid BEDJA, dimanche 12 octobre 2014, 23:43
 

Bonsoir,

Je compte intégrer dans mon jeu les objets, mais d'une autre manière que celle demandée:

en effet, un objet n'aura pas de poids ou de valeurs, uniquement une description, mais je veux faire en sorte que pour chaque objet, il existe une limite (par exemple, on ne peut pas porter plus de 8 objets A, pas plus de 3 objets B, etc ...).

Cela est-il possible ?

De plus, je suis confronté à un autre problème, je veux faire en sorte qu'un objet A soit présent en 4 exemplaires dans une Room, et qu'un autre objet B le soit en 2 exemplaires dans la même Room, mais je n'arrive pas à implémenter ceci dans mon jeu, existe-il une solution ?

Avatar Denis BUREAU
Re: Exercice 7.22
par Denis BUREAU, lundi 13 octobre 2014, 14:02
 

Ce n'est pas interdit, mais ça complique sérieusement la gestion des items ...

Une solution peut être de créer une classe MultItem qui comprendrait un Item, le nombre d'Items, et le nombre max d'Items.
Lorsque ce dernier nombre est égal à 1, un MultItem est équivalent à un Item.

Mais cela veut dire prévoir pas mal de méthodes de gestion dans MultItem et adapter pas mal de méthodes par rapport à ce qui est demandé dans les exercices. L'exercice 7.31.1 n'en sera que plus utile ...

Avatar Denis BUREAU
Re: Exercice 7.22
par Denis BUREAU, mardi 22 mars 2016, 11:03
 

Un étudiant a écrit :

Bonjour,

.../... j'ai un bug de compilation lorsque j'utilise la classe "ArrayList" afin de gérer les items.
D'après le debeug, ma classe Game "uses unchecked or unsafe operations".
Peut-être avez vous une idée de la signification de ce message.

Cordialement,

Avatar Denis BUREAU
Re: Exercice 7.22
par Denis BUREAU, mardi 22 mars 2016, 11:11
 

Traduisons le message : "utilise des opérations non vérifiées ou non sûres".

Même si ce n'est qu'un avertissement (warning), il faut le faire disparaître.

Le problème vient du fait que vous n'avez pas précisé le type des éléments de l'ArrayList ; donc, la JVM ne peut pas vérifier ce que vous mettez dedans, ni ce qui en sort.

Partout où vous utilisez le type ArrayList, vous devez écrire ArrayList<TypeDesÉléments>

Remarque : nous n'avons pas étudié ArrayList, pourquoi l'utiliser au détriment d'une autre collection d'objets qui, elle, a déjà utilisée dans ce projet (et qui en plus, est mieux adaptée au problème) ?
oeil de dragon game of throne
Re: Exercice 7.22
par Morgane Marie Catherine JOLY, mercredi 30 mars 2016, 18:32
 

Vous proposez dans une des réponses de faire une HashMap on l'on peut stocker les items dans une Room, peut on la déclarer comme ce qui suit: this.aItem = new HashMap<Item, Room>(); ?

Avatar Denis BUREAU
Re: Exercice 7.22
par Denis BUREAU, mercredi 30 mars 2016, 19:19
 

1) Votre HashMap ne devrait pas s'appeler aItem qui désigne plutôt un item. A la rigueur aItems.

2) Si vous déclarez une HashMap<Item,Room>, cela veut dire qu'à chaque objet Item, vous associez une Room : laquelle ? Celle dans laquelle il se trouve ? Mais à quoi bon, puisque votre HashMap est déjà un attribut de cette Room ?

3) Comment utiliserez-vous votre HashMap ? Lorsque vous voudrez récupérer un Item qui s'y trouve, vous utiliserez le nom de l'Item, non ? Il paraît donc approprié dans cette HashMap d'associer chaque objet Item à son nom. Pouvez-vous en déduire les types à utiliser dans HashMap<?,?> ?

Avatar Denis BUREAU
Re: Exercice 7.22
par Denis BUREAU, jeudi 15 mars 2018, 22:51
 

Un étudiant a écrit :

J’ai terminé l’exercice 7.22 et je  me pose une question concernant l’exercice 7.20.

Il nous est demandé de créer 2 attributs, l’un pour le poids et l’autre pour la description de l’item.
Mais arrivé à l’exercice 7.22 nous ne faisons qu’afficher les items présents dans chaque room et n’utilisons pas le poids.
Allons-nous l’utiliser plus tard ?

Avatar Denis BUREAU
Re: Exercice 7.22
par Denis BUREAU, jeudi 15 mars 2018, 22:56
 

1) Afficher les items présents peut très bien vous conduire à afficher leur poids !

2) Le poids aura effectivement une autre utilité dans un prochain exercice : pouvoir limiter le poids maximum que peut porter le "héros" (joueur).